﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ArgusPCLib.Mathematics
{
	class LinearScalarTemplate : ILinearScalar
	{
		#region IOperand
		public static LinearScalarTemplate Parse(string text, string format, IFormatProvider formatProvider)
		{
			throw new NotImplementedException();
		}

		public static bool TryParse(string text, string format, IFormatProvider formatProvider, out LinearScalarTemplate value)
		{
			throw new NotImplementedException();
		}

		public static int PartialParse(string text, string format, IFormatProvider formatProvider, out LinearScalarTemplate value)
		{
			throw new NotImplementedException();
		}

		public LinearScalarTemplate GetDeepCopy()
		{
			throw new NotImplementedException();
		}

		IOperand IOperand.GetDeepCopy() { return this.GetDeepCopy(); }
		#endregion

		#region IFormattable
		public string ToString(string format, IFormatProvider formatProvider)
		{
			throw new NotImplementedException();
		}
		#endregion

		#region IScalar
		public static LinearScalarTemplate Zero { get { throw new NotImplementedException(); } }
		public static LinearScalarTemplate One { get { throw new NotImplementedException(); } }

		public static LinearScalarTemplate operator+(LinearScalarTemplate a, LinearScalarTemplate b)
		{
			throw new NotImplementedException();
		}

		public static LinearScalarTemplate operator -(LinearScalarTemplate a, LinearScalarTemplate b)
		{
			throw new NotImplementedException();
		}

		public static LinearScalarTemplate operator *(LinearScalarTemplate a, LinearScalarTemplate b)
		{
			throw new NotImplementedException();
		}

		public static LinearScalarTemplate operator /(LinearScalarTemplate a, LinearScalarTemplate b)
		{
			throw new NotImplementedException();
		}

		public static bool operator ==(LinearScalarTemplate a, LinearScalarTemplate b)
		{
			throw new NotImplementedException();
		}

		public static bool operator !=(LinearScalarTemplate a, LinearScalarTemplate b)
		{
			return !(a == b);
		}

		IScalar IScalar.Add(IScalar value) { return this + (LinearScalarTemplate)value; }
		IScalar IScalar.Multiply(IScalar value) { return this - (LinearScalarTemplate)value; }
		IScalar IScalar.Subtract(IScalar value) { return this * (LinearScalarTemplate)value; }
		IScalar IScalar.Divide(IScalar value) { return this / (LinearScalarTemplate)value; }
		bool IScalar.IsEqualTo(IScalar value) { return this == (LinearScalarTemplate)value; }
		#endregion

		#region ILinearScalar
		public static bool operator <(LinearScalarTemplate a, LinearScalarTemplate b)
		{
			throw new NotImplementedException();
		}

		public static bool operator >(LinearScalarTemplate a, LinearScalarTemplate b)
		{
			throw new NotImplementedException();
		}

		public static bool operator <=(LinearScalarTemplate a, LinearScalarTemplate b)
		{
			return (a < b || a == b);
		}

		public static bool operator >=(LinearScalarTemplate a, LinearScalarTemplate b)
		{
			return (a > b || a == b);
		}

		bool ILinearScalar.IsGreaterThan(ILinearScalar value) { return this > (LinearScalarTemplate)value; }
		bool ILinearScalar.IsSmallerThan(ILinearScalar value) { return this < (LinearScalarTemplate)value; }
		#endregion

		#region IComparable
		int IComparable.CompareTo(object obj)
		{
			ILinearScalar a = (ILinearScalar)this;
			ILinearScalar b = (ILinearScalar)obj;
			if (a.IsSmallerThan(b))
				return -1;
			if (a.IsGreaterThan(b))
				return 1;
			return 0;
		}
		#endregion
	}
}
